home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cpp_libs / answrbok / 5_9.lha / 5_9 / 5_9c2.c < prev    next >
Text File  |  1993-08-08  |  1KB  |  70 lines

  1. * Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */
  2. * The C++ Answer Book */
  3. * Tony Hansen */
  4. * All rights reserved. */
  5. / at most m ints in 1..n
  6. oid set_is(intset& is, int m, int n)
  7.  
  8.    if (m < 1 || n < m) error("illegal intset size");
  9.    is.cursize = 0;
  10.    is.maxsize = m;
  11.    is.x = new int[is.maxsize];
  12.  
  13.  
  14. oid delete_is(intset& is)
  15.  
  16.    delete is.x;
  17.  
  18.  
  19. / is "t" a member?
  20. nt member_is(intset& is, int t)
  21.  
  22.    int l = 0;
  23.    int u = is.cursize - 1;
  24.  
  25.    while (l <= u) {
  26. int m = (l+u)/2;
  27.  
  28. if (t < is.x[m])
  29.     u = m-1;
  30.  
  31. else if (t > is.x[m])
  32.     l = m+1;
  33.  
  34. else
  35.     return 1;    // found
  36.    }
  37.  
  38.    return 0;        // not found
  39.  
  40.  
  41. / add "t" to set
  42. include <swap.h>
  43. oid insert_is(intset& is, int t)
  44.  
  45.    if (++is.cursize > is.maxsize)
  46. error("too many elements");
  47.  
  48.    is.x[is.cursize - 1] = t;
  49.  
  50.    for (int i = is.cursize - 1;
  51.  i > 0 && is.x[i-1] > is.x[i];
  52.  i--)
  53. swap(is.x[i], is.x[i-1]);
  54.  
  55.  
  56. oid iterate_is(intset&, int& i)
  57.  
  58.    i = 0;
  59.  
  60.  
  61. nt ok_is(intset& is, int& i)
  62.  
  63.    return i < is.cursize;
  64.  
  65.  
  66. nt next_is(intset& is, int& i)
  67.  
  68.    return is.x[i++];
  69.  
  70.